package ln.javatest.day12.demo01;
/*
java.util.LinkedList集合 implements List接口
LinkedList集合的特点：
    1.底层是一个链表结构：查询慢，增删快
    2.里面包含了大量操作首尾元素的方法
    注意：使用LinkedList集合特有的方法，不能使用多态（多态的弊端是，看不到子类特有方法）

    public void  addFirst(E e):将指定元素插入此列表的开头
    public void  addLast(E e):将指定元素添加到此列表的结尾
    public void  push(E e):将指定元素推入此列表所表示的堆栈的第一个

    public E  getFirst():返回此列表的第一个元素
    public E  getLast():返回此列表的最后一个元素

    public E removeFirst()：溢出并返回此列表的第一个元素
    public E removeLast()：移除并返回此列表的最后一个元素
    public E pop():从此列表所表示的堆栈处弹出弟一个元素

    public boolean isEmpty():如果列表中不包含元素，则返回true
*/

import java.util.LinkedList;

public class Demo02LinkedList {
    public static void main(String[] args) {
        show01();
        show02();
        show03();
    }

    /*public void  addFirst(E e):将指定元素插入此列表的开头
    public void  addLast(E e):将指定元素添加到此列表的结尾
    public void  push(E e):将指定元素推入此列表所表示的堆栈的第一个*/
    private static void show01() {
        //创建LinkedList集合对象
        LinkedList<String> linked = new LinkedList<>();
        //使用add方法往集合中添加元素
        linked.add("a");
        linked.add("b");
        System.out.println(linked); //[a, b]
        //addFirst
        linked.addFirst("最前");
        System.out.println(linked); //[最前, a, b]
        //push
        linked.push("推入的");
        System.out.println(linked); //[推入的, 最前, a, b]
        //addLast
        linked.addLast("最后");
        System.out.println(linked); //[推入的, 最前, a, b, 最后]

    }

    /*public E  getFirst():返回此列表的第一个元素
   public E  getLast():返回此列表的最后一个元素*/
    private static void show02() {

        //创建LinkedList集合对象
        LinkedList<String> linked1 = new LinkedList<>();
        //使用add方法往集合中添加元素
        linked1.add("a");
        linked1.add("b");
        System.out.println(linked1); //[a, b]
        //linked1.clear(); 清空了下面取不到会报错
        if(!linked1.isEmpty()){
            String first = linked1.getFirst();
            String last = linked1.getLast();
            System.out.println(first); //a
            System.out.println(last);  //b
        }
    }

    /*public E removeFirst()：溢出并返回此列表的第一个元素
    public E removeLast()：移除并返回此列表的最后一个元素
    public E pop():从此列表所表示的堆栈处弹出弟一个元素*/
    private static void show03() {
        //创建LinkedList集合对象
        LinkedList<String> linked2 = new LinkedList<>();
        //使用add方法往集合中添加元素
        linked2.add("a");
        linked2.add("b");
        System.out.println(linked2); //[a, b]
        String first1 = linked2.removeFirst();
        System.out.println(first1); //a
        System.out.println(linked2); //[b]
        String last1 = linked2.removeLast();
        System.out.println(last1); //b
        System.out.println(linked2); //[]
        //pop相当于First
        /*String first2 = linked2.pop();
        System.out.println(first2);
        System.out.println(linked2);*/
    }
}
